/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ordenamientos;

/**
 *
 * @author Víctor Plata
 */
public class Ordena {
    //Ordenamiento por Quicksort
    //La primera vez recibe el arreglo, 0 que será izquierda
    // y la longitud del arreglo que será derecha
    public static void quickSort(int arr[],int izq,int der)
    {
        int mi_pivote;
        if(izq<der)//siempre que izquierda sea mayor que derecha
        {
            //Cuando se llama está función por primera vez se hace una comparación con todo el 
            //arreglo
            mi_pivote=pivote(arr,izq,der);
            //Llamada recursiva a quicksort para los sub arreglos
            quickSort(arr,izq,mi_pivote-1);
            quickSort(arr,mi_pivote+1,der);
        }
    }
    //Método que se encarga de ordenar el arreglo
    //recibe el arreglo, una posición de izquierda y una de derecha
    public static int pivote(int arr2[],int izq, int der)
    {
        int i,pivote,v_pivote,aux=0;
        pivote=izq;//El pivote siempre será el valor de más a la izquiera
        v_pivote=arr2[pivote]; //se extrae el valor del pivote
        for(i=izq+1;i<=der;i++)
        {
            if(arr2[i]<v_pivote)//Se inicia comparaciones en el arreglo o subarreglo, eso lo dirá der
            {
                pivote++;//cuando algun valor del arreglo es menor que el pivote hay un intercambio
                aux=arr2[i];
                arr2[i]=arr2[pivote];
                arr2[pivote]=aux;
            }
        }
        //se fija el elemento ordenado después de la pasada
        aux=arr2[izq];
        arr2[izq]=arr2[pivote];
        arr2[pivote]=aux;
        return pivote;
    }
    //Método para aplicar el ordemiento de insecion a un arreglo
    public static void insercion(int v[]){
		int i,j,aux;
		for(i=1;i<v.length;i++){
			aux=v[i];//es el ultimo elemento de más a la izquierda 
			//de los sub arreglos
                        
                        //ciclo for en el cual si aux es menor a un a un elemento que se encuentre a la izquierda
                        //se hará el cambio
			for(j=i;j>0 && aux < v[j-1];j--){ 
				 v[j]=v[j-1];
				}
			v[j]=aux;//se recupera y se asgina mas a a la derecha el elemento con
			//el que se hacian las comparaciones
			}
		}
    //Método para aplicar el ordemiento de burbuja, recibe unicamente un arreglo unidimensional
    public static void burbuja(int arr[])
	{
	int aux,i,j;
	for(i=0;i<arr.length-1; i++) //Ciclo para hacer n-1 pasadas al arreglo 
	{
		for(j=0;j<arr.length-1; j++)//ciclo para hacer recorrer  todo el arreglo será usado n-1 veces
		{
			if(arr[j+1]<arr[j]) //Se compara que el elemento de la derecha sea menor
                                            //que el siguiente que se encuentra a la izquierda
			{
			aux=arr[j];//Si se cumple lo anterior se hace un intercambio de valores
			arr[j]=arr[j+1];
			arr[j+1]=aux;
			}
		}
	}
	}
    
}
